// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
// import com.alibaba.druid.util.FnvHash;

// import java.util.Collections;
// import java.util.List;
#pragma once
#include <string>
#include <list>
#include "../SQLExprImpl.h"
#include "../SQLName.h"
#include "../SQLExpr.h"
#include "../SQLReplaceable.h"

class SQLColumnDefinition;
class SQLASTVisitor;

class SQLDbLinkExpr :public SQLExprImpl ,virtual public SQLName,virtual public SQLExpr,virtual public SQLReplaceable {
  public:
    SQLExpr_ptr expr;
    string_ptr  dbLink;

    long dbLinkHashCode64;
    long hashCode64_;

    SQLDbLinkExpr() ;
  SHAREDOBJECT(SQLDbLinkExpr);

    string_ptr getSimpleName() ;

    SQLExpr_ptr getExpr() ;

    void setExpr(SQLExpr_ptr expr) ;

    string_ptr  getDbLink() ;

    void setDbLink(string_ptr  dbLink) ;

    //@Override
    void accept0(SQLASTVisitor_ptr visitor) ;

    //@Override
    BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target) ;

    //@Override
    SQLObject_list_ptr  getChildren() ;

    //@Override
    int hashCode() ;

    //@Override
    bool equals(Object_ptr obj) ;

    // SQLDbLinkExpr clone() ;
    virtual SQLObject_ptr clone();
    long nameHashCode64() ;

    //@Override
    long hashCode64() ;

    //@Override
    SQLObject_ptr  getResolvedColumn() ;
    // SQLColumnDefinition* getResolvedColumn() ;
};
